#ifndef __SYS_H
#define __SYS_H

#include "stm32f1xx_hal.h"
#include <stdint.h>

// 类型定义
typedef uint8_t  u8;
typedef uint16_t u16;
typedef uint32_t u32;

// GPIO位操作宏定义（兼容旧代码，已废弃）
// 注意：本项目已改用 HAL 库的 GPIO 操作函数（HAL_GPIO_WritePin/ReadPin）
// 这些宏定义保留用于向后兼容，但不推荐在新代码中使用

// 如果需要使用位带操作，请取消下面的注释
/*
// PC端口输出宏定义
#define PCout(n)   BIT_ADDR(GPIOC->ODR, n)  // 输出 
#define PCin(n)    BIT_ADDR(GPIOC->IDR, n)  // 输入 

// PB端口输出宏定义
#define PBout(n)   BIT_ADDR(GPIOB->ODR, n)  // 输出 
#define PBin(n)    BIT_ADDR(GPIOB->IDR, n)  // 输入 

// 位带操作，实现51类似的GPIO控制功能
// 具体实现思想，参考<<CM3权威指南>>第五章（87页~92页）
// IO口操作宏定义
#define BITBAND(addr, bitnum)   ((addr & 0xF0000000) + 0x2000000 + ((addr & 0xFFFFF) << 5) + (bitnum << 2)) 
#define MEM_ADDR(addr)          *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)  MEM_ADDR(BITBAND(addr, bitnum))
*/ 

// 延迟函数声明
void delay_us(uint32_t us);
void delay_ms(uint32_t ms);

// AT24CXX函数声明（兼容层）
void AT24CXX_Init(void);
void AT24CXX_WriteLenByte(uint16_t WriteAddr, uint32_t DataToWrite, uint8_t Len);
uint32_t AT24CXX_ReadLenByte(uint16_t ReadAddr, uint8_t Len);
void AT24CXX_WriteOneByte(uint16_t WriteAddr, uint8_t DataToWrite);
uint8_t AT24CXX_ReadOneByte(uint16_t ReadAddr);

#endif /* __SYS_H */

